// 这个js做全局配置，所有的html都应该引入这个js

// 后端地址
const BACK_URL = "http://localhost:8080";

// 统一给ajax处理，相当于给ajax做默认配置
$.ajaxSetup({
  // 避免浏览器会话不一致
  xhrFields: {
   withCredentials: true
  },
  // 处理意料之内的异常
  complete: function(xhr, status){
    if('error'==status) {
      alert("服务器连接失败");
      return;
    }
    // 后端返回统一的json格式
    var res = JSON.parse(xhr.responseText);
    // 对返回数据的code进行判断，不同的异常有不同的code
    if(503==res.code) {
      alert("登录已过期")
      // window.location.replace("/");// 暂时跳到主页
    }if(504==res.code) {
      alert(res.msg);
    }else if(500==res.code) {
      alert(res.msg);
    }
    // 其他意料之中的异常出现了再加
  },
  // 对不同的http错误码做处理，没有进入后端的异常处理
  statusCode: {
    404: function(arg1, arg2, arg3) {
      console.log(arg1, arg2, arg3);
      alert('404 接口不存在');
    },
    500: function(arg1, arg2, arg3) {
      alert(arg1, arg2, arg3);
      alert('500 服务端错误');
    }
  }
});

/**
 * 封装弹窗功能
 */
function dialog(
  msg,
  title = '提示',
  show,
  hide
) {
  // 这里把展示的回调和确认的回调搞混了
  const confirmButton = show? `<button type="button" class="btn btn-primary">确认</button>`: "";
  const cancelButton = hide? `<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>`: "";
  $(
    `
    <div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
            <h4 class="modal-title" id="myModalLabel">${title||'提示'}</h4>
          </div>
          <div class="modal-body">${msg}</div>
          <div class="modal-footer">
            ${cancelButton}
            ${confirmButton}
          </div>
        </div><!-- /.modal-content -->
      </div><!-- /.modal -->
    </div>
    `
  )
  .on('shown.bs.modal', show)// 加显示事件
  .on('hidden.bs.modal', hide)// 加隐藏事件
  .modal();
}

// 保存当前登录用户
let currentUser = null;

/**
 * 获取当前登录的用户
 */
function getCurrentUser() {
	return new Promise((resolve, reject) => {
		$.ajax({// 异步的
			url: BACK_URL + "/currentUser",
			method: "get",
			success:function (result) {
				if(result.code==200) {
					currentUser = result.data;
					resolve(currentUser);
				}else {
					reject();
				}
			}
		});
	});
}

/**
 * 退出登录
 */
 function logout() {
	$.ajax({
		url: BACK_URL + "/logout",
		method: "get",
		success:function (result) {
			if(result.code==200) {
				dialog("退出登录成功", "系统提示", null, function() {
					window.location.replace("/");// 跳转到主页
				});
			}
		}
	});
}

/**
 * 登录后刷新页面显示
 */
function freshForLogined() {
	$("#currentUser_nickName").html(currentUser.nickName);// 昵称
  $("#nav_avatar").attr("src", BACK_URL + "/file" + currentUser.avatar);// 头像
	// 先隐藏所有需要权限的元素
	$(".permission").hide();
	// 然后根据拥有的权限逐个显示
	currentUser.permissions?.forEach((e) => {
		$("."+e).show();// 显示这个权限对应的页面元素
	});

	// 最后才做统一显示
	$(".logined").show();
	$(".not-logined").hide();
}

/**
 * 未登录后刷新页面显示
 */
function freshForNotLogined() {
	$("#currentUser_nickName").html("");
	// 需要权限的元素全隐藏
	$(".permission").hide();
	// 最后才做统一显示
	$(".not-logined").show();
	$(".logined").hide();
}